/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rhdtp.demopf.control.admin;

import com.rhdtp.demopf.model.dao.RolDAO;
import com.rhdtp.demopf.model.dao.UsuarioDAO;
import com.rhdtp.demopf.model.dto.Rol;
import com.rhdtp.demopf.model.dto.Usuario;
import com.rhdtp.demopf.security.UserSession;
import com.rhdtp.demopf.util.MD5Util;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;

/**
 *
 * @author rhdtp
 */
public class Usuarios {

    private static final Logger logger = Logger.getLogger(Usuarios.class);
    private Usuario usuario;
    private Usuario us;
    private UsuarioDAO usuarioDAO;
    private RolDAO rolDAO;
    private UserSession userSession;
    private List<Usuario> usuariosFilter;

    public Usuarios() {
    }

    public void save() {
        usuario.setPass(MD5Util.encriptaMD5(usuario.getPass()));

        if (usuario.getId() != 0) {
            usuarioDAO.update(usuario);
            msgInfo("Info.", "El usuario: " + usuario.getNick() + " ah sido actualizado correctamente.");
        } else {
            usuario.setId(usuarioDAO.countId() + 1);
            usuarioDAO.save(usuario);
            msgInfo("Info.", "El usuario: " + usuario.getNick() + " ah sido guardado correctamente.");
        }

        this.initObjects();
    }

    public void cargaPerfil() {
        usuario = userSession.getUser();
    }

    public void updatePerfil() {
        usuario.setPass(MD5Util.encriptaMD5(usuario.getPass()));
        usuarioDAO.update(usuario);
        msgInfo("Info.", "Tu Perfil de Usuario ah sido actualizado correctamente.");
        this.initObjects();
    }

    public void edit(Usuario us) {
        usuario = usuarioDAO.load(us);
        RequestContext.getCurrentInstance().scrollTo("registro:formulario");
    }

    public void remove(Usuario u) {
        if (usuarioDAO.delete(u)) {
            msgInfo("Info.", "El usuario: " + u.getNick() + " a sido borrado correctamente.");
        } else {
            msgError("Error", "No se pudo borrar el Usuario, esto puede ser porque tiene algún registro dependiente");
        }
    }

    public void resetForm() {
        initObjects();
        RequestContext.getCurrentInstance().reset("registro:formulario");
    }

    public void reset() {
        this.initObjects();
    }

    @PostConstruct
    public void initObjects() {
        usuario = new Usuario();
        usuario.setRol(new Rol());
        usuario.setId(0);
        usuariosFilter = null;
    }

    public void msgInfo(String summary, String detail) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void msgError(String summary, String detail) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void msgWarning(String summary, String detail) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public List<Usuario> getUsuarios() {
        return usuarioDAO.list();
    }

    public List<Rol> getRols() {
        return rolDAO.list();
    }

    /**
     * @return the usuario
     */
    public Usuario getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    /**
     * @param usuarioDAO the usuarioDAO to set
     */
    public void setUsuarioDAO(UsuarioDAO usuarioDAO) {
        this.usuarioDAO = usuarioDAO;
    }

    /**
     * @return the us
     */
    public Usuario getUs() {
        return us;
    }

    /**
     * @param us the us to set
     */
    public void setUs(Usuario us) {
        this.us = us;
    }

    /**
     * @param rolDAO the rolDAO to set
     */
    public void setRolDAO(RolDAO rolDAO) {
        this.rolDAO = rolDAO;
    }

    public UserSession getUserSession() {
        return userSession;
    }

    public void setUserSession(UserSession userSession) {
        this.userSession = userSession;
    }

    public List<Usuario> getUsuariosFilter() {
        return usuariosFilter;
    }

    public void setUsuariosFilter(List<Usuario> usuariosFilter) {
        this.usuariosFilter = usuariosFilter;
    }
}
